package model

import (
	"time"
)

// ProjectInfo 是一条完整的日志数据, 包含从请求开始到结束完整的调用链路信息, 还有异常和警告等日志
type ProjectInfo struct {
	// UUID 主键
	ProjectID string `json:"ProjectID"`
	// 项目名称, 唯一id
	ProjectName string `json:"ProjectName"`
	// 项目开发平台, 比如 C#, Java, Android, IOS, Unity, Node js, asp.net core, go, flutter, C 等等...
	ProjectPlatform string `json:"ProjectPlatform"`
	// 创建者
	Cretor string `json:"Cretor"`
	// 创建时间
	CreateTime time.Time `json:"CreateTime"`
}

// LogDetailData 是一条完整的日志数据
type LogDetailData struct {
	// guid
	TraceID string `json:"TraceID"`
	// 项目id
	ProjectID string `json:"ProjectID"`
	// 日志等级, debug, info, warning, error, fatal
	LogLevel string `json:"LogLevel"`
	// 日志标题, 比如错误日志的一段描述文字, 索引越界, 空指针错误, 除数不能为0等等
	LogTitle string `json:"LogTitle"`
	// 日志内容, 可以是结构体类型的指针, 因为链路追踪日志包含大量数据
	LogContent string `json:"LogContent"`
	// 当前http请求的返回状态码
	HTTPStatusCode int `json:"HTTPStatusCode"`
	// 堆栈信息, 比如java和C#的异常堆栈
	StackTrace string `json:"StackTrace"`
	// 错误类型, 比如C#的 System.IO.IOException, System.IndexOutOfRangeException 等
	ErrorType string `json:"ErrorType"`
	// 程序集名称, 比如 ilspy.exe dotnet.dll 等等
	AssemblyName string `json:"AssemblyName"`
	// 进程名称 比如 rqlited.exe rqlited 等等
	ProcessName string `json:"ProcessName"`
	// 进程id
	ProcessID int `json:"ProcessID"`
	// 包名,命名空间
	PackageName string `json:"PackageName"`
	// 方法名, 函数名称
	FunctionName string `json:"FunctionName"`
	// 当前机器的ip地址, 可以是内网ip
	ClientIP string `json:"ClientIP"`
	// 描述内容
	Remark string `json:"Remark"`
	// 创建时间
	CreateTime time.Time `json:"CreateTime"`
	// 调用链路日志
	LogTraceList []LogTraceInfo `json:"LogTraceList"`
}

// LogTraceInfo 是完整调用链路的其中一部分的日志
type LogTraceInfo struct {
	// 当前调用链路的步骤记录id
	RPCTraceID string `json:"RPCTraceID"`
	// 当前链路上下文的唯一ID
	TraceID string `json:"TraceID"`
	// 日志标题, 比如错误日志的一段描述文字, 索引越界, 空指针错误, 除数不能为0等等
	LogTitle string `json:"LogTitle"`
	// 日志内容, 可以是结构体类型的指针, 因为链路追踪日志包含大量数据
	LogContent string `json:"LogContent"`
	// 堆栈信息, 比如java和C#的异常堆栈
	StackTrace string `json:"StackTrace"`
	// 错误类型, 比如C#的 System.IO.IOException, System.IndexOutOfRangeException 等
	ErrorType string `json:"ErrorType"`
	// 程序集名称, 比如 ilspy.exe dotnet.dll 等等
	AssemblyName string `json:"AssemblyName"`
	// 进程名称 比如 rqlited.exe rqlited 等等
	ProcessName string `json:"ProcessName"`
	// 进程id
	ProcessID int `json:"ProcessID"`
	// 包名,命名空间
	PackageName string `json:"PackageName"`
	// 方法名, 函数名称
	FunctionName string `json:"FunctionName"`
	// 当前机器的ip地址, 可以是内网ip
	ClientIP string `json:"ClientIP"`
	// 操作系统名称, windows10, ubuntu 等等
	OSName string `json:"OSName"`
	// 描述内容
	Remark string `json:"Remark"`
	// 创建时间
	CreateTime time.Time `json:"CreateTime"`
}
